﻿#ifndef DANODELINKPOINT_H
#define DANODELINKPOINT_H
#include "DAWorkFlowGlobal.h"
#include <QtCore/qglobal.h>
#include <QDebug>

/**
 * @brief 用于表征连接点信息的数据
 */
class DAWORKFLOW_API DANodeLinkPoint
{
public:
    /**
     * @brief 连接点的方向
     */
    enum Direction { East, South, West, North };

    /**
     * @brief 节点的方法
     */
    enum Way {
        Input, ///< 输入节点
        Output ///< 输出节点
    };

    DANodeLinkPoint();
    DANodeLinkPoint(const QPoint &p, const QString &n, Way w = Output, Direction d = East);
    bool isValid() const;
    bool isInput() const;
    bool isOutput() const;

    QPoint position; ///< 连接点相对FCAbstractNodeGraphicsItem的位置
    QString name; ///< 连接点名字
    Way way; ///< 连接点的属性，是输入还是输出
    Direction direction; ///< 连接点引线的伸出方向（用于绘制连线的时候指定方向）
};
Q_DECLARE_METATYPE(DANodeLinkPoint)

// FCNodeLinkPoint 的操作符,为了可以适用map hash set
DAWORKFLOW_API bool operator==(const DANodeLinkPoint &a, const DANodeLinkPoint &b);
DAWORKFLOW_API bool operator==(const DANodeLinkPoint &a, const QString &b);
DAWORKFLOW_API bool operator<(const DANodeLinkPoint &a, const DANodeLinkPoint &b);
DAWORKFLOW_API uint qHash(const DANodeLinkPoint &key, uint seed);
DAWORKFLOW_API QDebug operator<<(QDebug dbg, const DANodeLinkPoint &a);

#endif // FCNODELINKPOINT_H
